/*
 * MD5.java
 * Versão: 1.0
 * Data de Criação : 22/08/2011
 * Copyright (c) 2008-2011 Universidade Estadual de
 * Londrina - UEL.
 * Rodovia Celso Garcia Cid, Cidade Universitária,
 * Londrina, Paraná
 * Brasil
 * Todos os direitos reservados.
 *
 * Este software é de informação confidenciais de
 * propriedade da UEL Univesidade Estadual de Londrina.
 * ("Informações Confidenciais "). Você não poderá
 * compartilhar estas informações por ser de carater
 * confidencial e usará somente em acordo com os termos de
 * licençada UEL
 */
package br.uel.ati.encriptacao;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Esta classe realiza a encriptação de uma string fazendo uso do algoritmo MD5.
 * O algoritmo MD5 é o padrão adotado na UEL.
 *
 * @author Humberto Ferreira da Luz Junior
 * @version 1.0
 */
public class MD5 {

    /**
     * Realiza a encriptação de uma string.
     * @param valor, O valor que será encriptado.
     * @return String encriptada.
     */
    public static String encriptar(String valor) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.update(valor.getBytes());
        return stringHexa(md.digest());
    }

    /**
     * Como o comando digest() retorna um array de bytes, é necessário um método
     * que o converte para uma string, sendo essa a real utilidade deste método.
     * @param bytes, palavra encriptada em bytes.
     * @return Palavra encriptada em string.
     */
    private static String stringHexa(byte[] bytes) {
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < bytes.length; i++) {
            int parteAlta = ((bytes[i] >> 4) & 0xf) << 4;
            int parteBaixa = bytes[i] & 0xf;
            if (parteAlta == 0) {
                s.append('0');
            }
            s.append(Integer.toHexString(parteAlta | parteBaixa));
        }
        return s.toString();
    }
}
